Распределенные и параллельные вычисления/Введение
Распределенные или параллельные?
[править]Перед тем как начать изучение различных видов разветвления вычислительных процессов необходимо разобраться в базовых понятиях. Часто термин «распределенные вычисления» путают с термином «параллельные вычисления», иногда их ошибочно считают синонимами. Давайте разберемся чем отличаются эти два понятия.
Распределенные вычисления — способ решения трудоёмких вычислительных задач с использованием нескольких компьютеров, объединённых в параллельную вычислительную систему. Википедия
|
Параллельные вычисления — такой способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно. Википедия
|
Таким образом распределенные вычисления не могут производится на одной вычислительной машине, а параллельные вычисления могут производиться как на одной (многопоточность), так и на нескольких машинах. Возможность выполнения параллельных вычислений в распределенных системах и приводит к частому заблуждению, что это одно и тоже.
Распределенная система — это набор независимых компьютеров, представляющиеся их пользователям единой объединенной системой. |
Параллельные вычисления — вычисления, которые можно реализовать на многопроцессорных системах с использованием возможности одновременного выполнения многих действий, порождаемых процессом решения одной или многих задач. Словарь по кибернетике[2]
|
Явление открытых (добровольных) вычислительных систем (англ. volunteer computing) следует выделить в отдельную тему и рассматривать как практическую реализацию систем распределенного вычисления. Такие вычислительные системы (сети) чаще всего строятся на базе, так называемых GRID систем (сетей), в русском языке иногда называются как системы метакомпьютинга (матавычисления).[3]
Задачи и цели
[править]Вследствие повсеместного использования вычислительной техники бурно развивается направление численного моделирования (англ. numerical simulation[4]). Численное моделирование, является промежуточным элементом между аналитическими методами изучения и физическими экспериментами.[5] Рост количества задач, для решения которых необходимо использовать параллельные вычисления, обусловлен:
- возможностью изучать явления, которые являются либо слишком сложными для исследования аналитическими методами, либо слишком дорогостоящими или опасными для экспериментального изучения
- быстрым ростом сложности объектов моделирования (усложнение и увеличение систем)
- возникновением необходимости решения задач, для которых необходимо проведение анализа сложного поведения (например, условий перехода, к так называемому, детерминированному хаосу)[4]
- необходимостью управления сложными промышленными и технологическими процессами в режиме реального времени и в условиях
неопределенности[6]
- ростом числа задач, для решения которых необходимо обрабатывать гигантские объемы информации (например, 3D моделирование)
При этом, использование численных моделей и кластерных систем, позволяет значительно уменьшить стоимость процесса научного и технологического поиска. Кластерные системы в последние годы широко используются во всем мире как дешевая альтернатива суперкомпьютерам. Система требуемой производительности собирается из готовых, серийно выпускаемых компьютеров, объединенных, опять же, с помощью серийно выпускаемого коммуникационного оборудования. Это, с одной стороны, увеличивает доступность суперкомпьютерных технологий, а с другой, повышает актуальность их освоения, поскольку для всех типов многопроцессорных систем требуется использование специальных технологий программирования для того, чтобы программы могли в полной мере использовать ресурсы высокопроизводительной вычислительной системы.
Создать программу для выполнения которой будут задействованы все ресурсы суперкомпьютера не всегда возможно. В самом деле, при разработке параллельной программы для распределенной системы мало разбить программу на параллельные потоки. Для эффективного использования ресурсов необходимо обеспечить равномерную загрузку каждого из узлов кластера, что в свою очередь означает, что все потоки программы должны выполнить примерно одинаковый объем вычислений.
Рассмотрим частный случай, когда при решении некоторой параметрической задачи для разных значений параметров время поиска решения может значительно различаться. Тогда мы получим значительный перекос загрузки узлов кластера. В действительности практически любая вычислительная задача выполняется в кластере не равномерно.
Несмотря на это, использование кластерных систем всегда более эффективно для обслуживания вычислительных потребностей большого количества пользователей, чем использование эквивалентного количества однопроцессорных рабочих станций, так как в этом случае с помощью системы управления заданиями легче обеспечить равномерную и более эффективную загрузку вычислительных ресурсов.
Получение высокой эффективности выполнения программ усложняет использование параллельных систем.[7] Согласно отчету Межведомственной комиссии по развитию сверхмощных вычислений США эффективность современных параллельных систем в среднем составляет менее 10%.[8]
Доминирующее положение при разработке параллельных программ для параллельных систем занимает стандарт MPI (англ. Message Passing Interface). Программа, разработанная в модели передачи сообщений, может быть представлена информационным графом, вершинам которого соответствуют параллельные ветви программы, а ребрам коммуникационные связи между ними. Это можно использовать для диспетчеризации заданий и их вычислительных потоков. Учитывая гетерогенность вычислительных ресурсов и сред передачи данных в кластере, можно осуществить распределение вычислительных потоков (ветвей) по вычислительным узлам так, чтобы минимизировать накладные расходы на обмен данными между потоками и выровнять вычислительную нагрузку между узлами. Для этого необходимо обладать информацией о мощности и загруженности узлов и структуре параллельных программ, которые ожидают выполнения.[9]
В этой книге описываются методы управления вычислительными заданиями в параллельных кластерных системах с использованием программы мониторинга Ganglia и интерфейса передачи сообщений MPI, с целью увеличения эффективности кластеров и более равномерного распределения нагрузки между узлами кластера.
Из готовых программных решений для динамического управления нагрузкой и распределения ресурсов внутри кластера можно выделить менеджер ресурсов Torque в связке с локальным планировщиком задач Maui. Именно эти программные продукты наиболее часто используются для этих целей. Большим плюсом этого ПО является то, что это продукты с открытым кодом. Менеджер ресурсов Torque позволяет автоматически распределять вычислительные ресурсы между задачами, управлять порядком их запуска, временем работы, получать информацию о состоянии очередей. При невозможности запуска задач немедленно, они ставятся в очередь и ожидают, пока не освободятся нужные ресурсы.[7].
Однако, эти программы применимы только в рамках локального кластера. Они не используются для диспетчеризации параллельных программ в пространственно распределенных (GRID, мультикопьютинг) системах.
Существует множество аналогичных специализированных пакетов для централизованной диспетчеризации параллельных программ в пространственно распределенных системах: Grid-Way, CSF, Nimrod/G, Condor-G, GrADS, AppLeS, DIRAC, WMS и др.[7] Но описание методов управления пространственно распределенными (GRID, мультикопьютинг) системами выходит за рамки этой книги.
Безопасность
[править]На данном этапе развития современных вычислительных комплексов существует проблема создания унифицированного, эффективно использующего ресурсы и предоставляющего гибкие настройки безопасности и конфиденциальности управляющего программного обеспечения. Всякий раз при построении нового большого суперкомпьютера, задача выбора ПО для управления и мониторинга решается практически с нуля. Особенно это актуально для компаний, предоставляющих машинное время в аренду, поскольку ни бесплатного, ни коммерческого комплексного пакета ПО такого класса пока не существует.[7]
С точки зрения эффективности использования, имеется несколько вариантов решения задачи мониторинга, управления узлами и компонентами суперкомпьютера, создания и управления очередями заданий. Что касается вопросов безопасности суперкомпьютеров, их решение либо не происходит вообще (нет обеспечения безопасности/конфиденциальности), либо всё сводится к разграничению доступа к файлам и данным на уровне пользователей операционной системы, назначению прав доступа к хранилищам и иным компонентам суперкомпьютера, а передача всех данных по открытым каналам происходит с шифрованием данных (используя технологию SSL). Такой под ход, в частности, в среде Linux не избавляет от следующих ситуаций (если не вносить модификацию в исходные тексты ядра и утилит ОС):[7]
- практически любой пользователь может узнать кто, когда и какое время использует узлы суперкомпьютера;
- практически любой пользователь может узнать, кто в данный момент находится на управляющем узле суперкомпьютера и какие процессы запускает, какие программы использует (при наличии нескольких управляющих узлов – только на том, на который пользователь вошёл);
- при определённых навыках, пользователь может узнать что, кем и где запущено на вычислительных узлах суперкомпьютера (только в том случае, если разграничение доступа на узлы суперкомпьютера сделано стандартным для ОС Linux способом);
- при использовании стандартных коммерческих вычислительных пакетов на суперкомпьютере, практически любой пользователь может получить доступ к временным данным других пользователей (только в случае, если сам пользователь не позаботится о сохранности своих данных).
Помимо названных, существует ещё несколько ситуаций, в которых возможна утечка конфиденциальной информации при работе на «стандартном» суперкомпьютере под управлением ОС Linux.[7]
Примечания
[править]- ↑ Эндрю Таненбаум, Мартин ван Стеен Распределенные системы. Принципы и парадигмы = Andrew S. Tanenbaum, Maarten van Steen. "Destributed systems. Principles and paradigms. — Санкт-Петербург: Питер, 2003. — 877 с. — (Классика computer science). — ISBN 5-272-00053-6
- ↑ Словарь по кибернетике / Под редакцией академика В. С. Михалевича. — 2-е. — Киев: Главная редакция Украинской Советской Энциклопедии имени М. П. Бажана, 1989. — 751 с. — (С48). — 50000 экз. — ISBN 5-88500-008-5
- ↑ http://parallel.ru/meta/
- ↑ а б в г д С. Н. Андрианов, А. Б. Дегтярев 1 // ПАРАЛЛЕЛЬНЫЕ И РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ. — С.-Петерб.: Издательство С.-Петербургского университета, 2007. — 61 с.
- ↑ а б в г д е ё А. А. Букатов, В. Н. Дацюк, А. И. Жегуло Программирование многопроцессорных вычислительных систем. — Ростов-на-Дону: ООО «ЦВВР», 2003. — 208 с. — ISBN 5-94153-062-5
- ↑ Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. – М.: Мир, 1982. – 416 с.
- ↑ а б в г д е Материалы Девятой международной конференции-семинара ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ НА КЛАСТЕРНЫХ СИСТЕМАХ / С.М. Аракелян (ответственный редактор). — Владимир: Издательство Владимирского государственного университета, 2009. — 437 с. — 150 экз. экз. — ISBN 978-5-89368-958-7
- ↑ Federal Plan for High-End Computing: Report of the High-End Computing Revitalization Task Force (HECRTF), 2004, http://www.nitrd.gov/pubs/2004_hecrtf/20040702_hecrtf.pdf
- ↑ ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ НА КЛАСТЕРНЫХ СИСТЕМАХ — Материалы Седьмой Международной конференции-семинара, Нижний Новгород, 26–30 ноября 2007 г.